MkDevTools
Node showing information about used dev tools.¶
Example: From project¶
Pre-Commit¶
This project uses pre-commit to ensure code quality.
A .pre-commit-config.yaml
configuration file tailored for this project is provided
in the root folder.
Config
default_language_version:
python: python3.12
default_stages: [pre-commit]
repos:
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: uv run pytest
language: system
# stages: [push]
types: [python]
pass_filenames: false
always_run: true
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
# - id: trailing-whitespace
# - id: check-ast
- id: check-case-conflict
- id: check-docstring-first
- id: check-merge-conflict
# - id: check-yaml
- id: check-toml
- id: check-json
- id: detect-private-key
- id: forbid-new-submodules
# - id: check-added-large-files
# https://pre-commit.com/hooks.html
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0
hooks:
- id: mypy
# args: [--ignore-missing-imports]
additional_dependencies: ["orjson"]
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.9.6
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/commitizen-tools/commitizen
rev: v4.2.1
hooks:
- id: commitizen
stages: [commit-msg]
additional_dependencies: [typing-extensions]
MyPy¶
MyPy is used for type checking. You can find the configuration in the
pyproject.toml
file.
Config
PyRight¶
PyRight is used for type checking. You can find the configuration in the
pyproject.toml
file.
Config
venvPath = "."
venv = ".venv"
pythonVersion = "3.12"
pythonPlatform = "All"
deprecateTypingAliases = true
reportMissingTypeStubs = false
reportUnusedCallResult = false
reportUnknownVariableType = false
reportAny = false
reportExplicitAny = false
reportImplicitOverride = false
reportUnusedFunction = false
reportImplicitStringConcatenation = false
reportIgnoreCommentWithoutRule = false
reportUnannotatedClassAttribute = false
reportSelfClsParameterName = false
reportPrivateImportUsage = false
MkDocs¶
Ruff is used as a linter. You can find the configuration in the
pyproject.toml
file.
Config
line-length = 90
extend-exclude = [
"docs",
]
target-version = "py312"
[lint]
preview = true
select = [
"A",
"B",
"BLE",
"C",
"C4",
"COM",
"D",
"E",
"EM",
"EXE",
"F",
"FA",
"FLY",
"G",
"I",
"ICN",
"INP",
"INT",
"ISC",
"N",
"PERF",
"PIE",
"PLE",
"PLC",
"PLR",
"PT",
"PTH",
"PYI",
"Q",
"RET",
"RSE",
"RUF",
"SIM",
"SLF",
"SLOT",
"T10",
"TC",
"TID",
"TRY",
"UP",
"W",
"YTT",
]
ignore = [
"C408",
"B905",
"C901",
"D100",
"D101",
"D102",
"D103",
"D104",
"D105",
"D106",
"D107",
"D203",
"D204",
"D213",
"D215",
"D400",
"D401",
"D404",
"D406",
"D407",
"D408",
"D409",
"D413",
"N813",
"PLC0415",
"PLC2701",
"PLR0904",
"PLR0912",
"PLR0913",
"PLR0915",
"PLR0917",
"PLR6301",
"SLF001",
"RUF012",
"TRY003",
"COM812",
"COM819",
"D206",
"E501",
"ISC001",
"Q000",
"Q001",
"Q002",
"Q003",
"W191",
]
[lint.flake8-quotes]
docstring-quotes = "double"
[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true
[lint.per-file-ignores]
"__init__.py" = [
"E402",
"I001",
]
[format]
preview = true
docstring-code-format = true
Ruff¶
Ruff is used as a linter. You can find the configuration in the
pyproject.toml
file.
Config
line-length = 90
extend-exclude = [
"docs",
]
target-version = "py312"
[lint]
preview = true
select = [
"A",
"B",
"BLE",
"C",
"C4",
"COM",
"D",
"E",
"EM",
"EXE",
"F",
"FA",
"FLY",
"G",
"I",
"ICN",
"INP",
"INT",
"ISC",
"N",
"PERF",
"PIE",
"PLE",
"PLC",
"PLR",
"PT",
"PTH",
"PYI",
"Q",
"RET",
"RSE",
"RUF",
"SIM",
"SLF",
"SLOT",
"T10",
"TC",
"TID",
"TRY",
"UP",
"W",
"YTT",
]
ignore = [
"C408",
"B905",
"C901",
"D100",
"D101",
"D102",
"D103",
"D104",
"D105",
"D106",
"D107",
"D203",
"D204",
"D213",
"D215",
"D400",
"D401",
"D404",
"D406",
"D407",
"D408",
"D409",
"D413",
"N813",
"PLC0415",
"PLC2701",
"PLR0904",
"PLR0912",
"PLR0913",
"PLR0915",
"PLR0917",
"PLR6301",
"SLF001",
"RUF012",
"TRY003",
"COM812",
"COM819",
"D206",
"E501",
"ISC001",
"Q000",
"Q001",
"Q002",
"Q003",
"W191",
]
[lint.flake8-quotes]
docstring-quotes = "double"
[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true
[lint.per-file-ignores]
"__init__.py" = [
"E402",
"I001",
]
[format]
preview = true
docstring-code-format = true
Coverage¶
Coverage is used to monitor test coverage.
Config
## Pre-Commit
This project uses **pre-commit** to ensure code quality.
A `.pre-commit-config.yaml` configuration file tailored for this project is provided
in the root folder.
```` {.md }
# Setup pre-commit hooks for required formatting
pre-commit install
````
??? quote "Config"
```` {.yaml }
default_language_version:
python: python3.12
default_stages: [pre-commit]
repos:
- repo: local
hooks:
- id: pytest-check
name: pytest-check
entry: uv run pytest
language: system
# stages: [push]
types: [python]
pass_filenames: false
always_run: true
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
# - id: trailing-whitespace
# - id: check-ast
- id: check-case-conflict
- id: check-docstring-first
- id: check-merge-conflict
# - id: check-yaml
- id: check-toml
- id: check-json
- id: detect-private-key
- id: forbid-new-submodules
# - id: check-added-large-files
# https://pre-commit.com/hooks.html
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0
hooks:
- id: mypy
# args: [--ignore-missing-imports]
additional_dependencies: ["orjson"]
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.9.6
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/commitizen-tools/commitizen
rev: v4.2.1
hooks:
- id: commitizen
stages: [commit-msg]
additional_dependencies: [typing-extensions]
````
??? info "Installing Pre-Commit"
To install pre-commit:
```` {.bash }
pip install pre-commit
````
[More information](https://pre-commit.com)
## MyPy
**MyPy** is used for type checking. You can find the configuration in the
`pyproject.toml` file.
```` {.md }
hatch run mypy --help
````
??? quote "Config"
```` {.toml }
python_version = "3.12"
disable_error_code = [
"assignment",
"misc",
"import",
"has-type",
]
check_untyped_defs = true
````
??? info "Installing MyPy"
To install mypy:
```` {.bash }
pip install mypy
````
[More information](https://mypy-lang.org)
## PyRight
**PyRight** is used for type checking. You can find the configuration in the
`pyproject.toml` file.
```` {.md }
hatch run pyright --help
````
??? quote "Config"
```` {.toml }
venvPath = "."
venv = ".venv"
pythonVersion = "3.12"
pythonPlatform = "All"
deprecateTypingAliases = true
reportMissingTypeStubs = false
reportUnusedCallResult = false
reportUnknownVariableType = false
reportAny = false
reportExplicitAny = false
reportImplicitOverride = false
reportUnusedFunction = false
reportImplicitStringConcatenation = false
reportIgnoreCommentWithoutRule = false
reportUnannotatedClassAttribute = false
reportSelfClsParameterName = false
reportPrivateImportUsage = false
````
??? info "Installing PyRight"
To install pyright:
```` {.bash }
pip install pyright
````
[More information](https://microsoft.github.io/pyright/)
## MkDocs
**Ruff** is used as a linter. You can find the configuration in the
`pyproject.toml` file.
```` {.md }
hatch run ruff --help
````
??? quote "Config"
```` {.toml }
line-length = 90
extend-exclude = [
"docs",
]
target-version = "py312"
[lint]
preview = true
select = [
"A",
"B",
"BLE",
"C",
"C4",
"COM",
"D",
"E",
"EM",
"EXE",
"F",
"FA",
"FLY",
"G",
"I",
"ICN",
"INP",
"INT",
"ISC",
"N",
"PERF",
"PIE",
"PLE",
"PLC",
"PLR",
"PT",
"PTH",
"PYI",
"Q",
"RET",
"RSE",
"RUF",
"SIM",
"SLF",
"SLOT",
"T10",
"TC",
"TID",
"TRY",
"UP",
"W",
"YTT",
]
ignore = [
"C408",
"B905",
"C901",
"D100",
"D101",
"D102",
"D103",
"D104",
"D105",
"D106",
"D107",
"D203",
"D204",
"D213",
"D215",
"D400",
"D401",
"D404",
"D406",
"D407",
"D408",
"D409",
"D413",
"N813",
"PLC0415",
"PLC2701",
"PLR0904",
"PLR0912",
"PLR0913",
"PLR0915",
"PLR0917",
"PLR6301",
"SLF001",
"RUF012",
"TRY003",
"COM812",
"COM819",
"D206",
"E501",
"ISC001",
"Q000",
"Q001",
"Q002",
"Q003",
"W191",
]
[lint.flake8-quotes]
docstring-quotes = "double"
[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true
[lint.per-file-ignores]
"__init__.py" = [
"E402",
"I001",
]
[format]
preview = true
docstring-code-format = true
````
??? info "Installing MkDocs"
To install mkdocs:
```` {.bash }
pip install mkdocs
````
[More information](https://mkdocs.org/)
## Ruff
**Ruff** is used as a linter. You can find the configuration in the
`pyproject.toml` file.
```` {.md }
hatch run ruff --help
````
??? quote "Config"
```` {.toml }
line-length = 90
extend-exclude = [
"docs",
]
target-version = "py312"
[lint]
preview = true
select = [
"A",
"B",
"BLE",
"C",
"C4",
"COM",
"D",
"E",
"EM",
"EXE",
"F",
"FA",
"FLY",
"G",
"I",
"ICN",
"INP",
"INT",
"ISC",
"N",
"PERF",
"PIE",
"PLE",
"PLC",
"PLR",
"PT",
"PTH",
"PYI",
"Q",
"RET",
"RSE",
"RUF",
"SIM",
"SLF",
"SLOT",
"T10",
"TC",
"TID",
"TRY",
"UP",
"W",
"YTT",
]
ignore = [
"C408",
"B905",
"C901",
"D100",
"D101",
"D102",
"D103",
"D104",
"D105",
"D106",
"D107",
"D203",
"D204",
"D213",
"D215",
"D400",
"D401",
"D404",
"D406",
"D407",
"D408",
"D409",
"D413",
"N813",
"PLC0415",
"PLC2701",
"PLR0904",
"PLR0912",
"PLR0913",
"PLR0915",
"PLR0917",
"PLR6301",
"SLF001",
"RUF012",
"TRY003",
"COM812",
"COM819",
"D206",
"E501",
"ISC001",
"Q000",
"Q001",
"Q002",
"Q003",
"W191",
]
[lint.flake8-quotes]
docstring-quotes = "double"
[lint.isort]
lines-after-imports = 2
force-sort-within-sections = true
combine-as-imports = true
[lint.per-file-ignores]
"__init__.py" = [
"E402",
"I001",
]
[format]
preview = true
docstring-code-format = true
````
??? info "Installing Ruff"
To install ruff:
```` {.bash }
pip install ruff
````
[More information](https://beta.ruff.rs/)
## Coverage
**Coverage** is used to monitor test coverage.
```` {.md }
hatch run coverage run some_module.py
````
??? quote "Config"
```` {.toml }
[report]
exclude_lines = [
"pragma: no cover",
"if TYPE_CHECKING:",
"@overload",
"except ImportError",
"if __name__ == \"__main__\":",
]
````
??? info "Installing Coverage"
To install coverage:
```` {.bash }
pip install coverage
````
[More information](https://coverage.readthedocs.io/)
Name | Children | Inherits |
---|---|---|
MkTemplate mknodes.templatenodes.mktemplate Node representing a jinja template. |
graph TD
94596169006672["mkdevtools.MkDevTools"]
94596168228624["mktemplate.MkTemplate"]
94596169139824["mkcontainer.MkContainer"]
94596169136704["mknode.MkNode"]
94596171773984["node.Node"]
139930746687680["builtins.object"]
94596168228624 --> 94596169006672
94596169139824 --> 94596168228624
94596169136704 --> 94596169139824
94596171773984 --> 94596169136704
139930746687680 --> 94596171773984
/home/runner/work/mknodes/mknodes/mknodes/templatenodes/mkdevtools/metadata.toml
[metadata]
icon = "mdi:wrench"
status = "new"
name = "MkDevTools"
virtual_children = true
[examples.regular]
title = "From project"
jinja = """
{{ mk.MkDevTools() }}
"""
# [examples.explicit]
# title = "Explicit"
# jinja = """
# {{ ["black"] | MkDevTools }}
# """
[output.markdown]
template = """
{% filter rstrip %}
{% for tool in node.tools %}
{{ tool.title | MkHeader }}
{{ tool.description }}
{% if tool.setup_cmd %}
{{ tool.setup_cmd | render_string | MkCode(language="md")}}
{% endif %}
{{ (tool.cfg.content or "") | MkCode(language=tool.cfg.syntax) | MkAdmonition(collapsible=True, title="Config", typ="quote") }}
{{ ["To install " ~ tool.identifier ~ ":",
("pip install " ~ tool.identifier) | MkCode(language="bash"),
tool.url | MkLink("More information")] | MkAdmonition(collapsible=True, title="Installing " ~ tool.title)}}
{% endfor %}
{% endfilter %}
"""